/**
 * @file ZstdFormat.h
 * @brief ZSTD格式插件头文件
 * @details 定义了处理ZSTD格式压缩文件的插件类
 */

#ifndef ZSTD_FORMAT_H
#define ZSTD_FORMAT_H

#include "FormatPlugin.h"
#include <String.h>

/**
 * @class ZstdFormat
 * @brief ZSTD格式处理插件
 * @details 实现了ZSTD格式的压缩和解压缩功能
 */
class ZstdFormat : public FormatPlugin
{
public:
    /**
     * @brief 构造函数
     */
    ZstdFormat();

    /**
     * @brief 析构函数
     */
    virtual ~ZstdFormat();

    /**
     * @brief 获取插件支持的格式名称
     * @return 格式名称
     */
    virtual BString GetFormatName() const;

    /**
     * @brief 获取插件支持的文件扩展名列表
     * @return 扩展名列表，以分号分隔
     */
    virtual BString GetSupportedExtensions() const;

    /**
     * @brief 检查插件是否支持指定的文件
     * @param filePath 文件路径
     * @return 是否支持
     */
    virtual bool CanHandle(const char *filePath) const;

    /**
     * @brief 压缩文件或目录
     * @param sourcePath 源文件或目录路径
     * @param targetPath 目标压缩文件路径
     * @return 操作是否成功
     */
    virtual bool Compress(const char *sourcePath, const char *targetPath);

    /**
     * @brief 解压缩文件
     * @param sourcePath 源压缩文件路径
     * @param targetPath 目标解压目录
     * @return 操作是否成功
     */
    virtual bool Extract(const char *sourcePath, const char *targetPath);

    /**
     * @brief 列出压缩文件中的内容
     * @param archivePath 压缩文件路径
     * @return 内容列表字符串
     */
    virtual BString ListContents(const char *archivePath);

private:
    /**
     * @brief 检查文件是否为ZSTD格式
     * @param filePath 文件路径
     * @return 是否为ZSTD格式
     */
    bool _IsZstdFile(const char *filePath) const;

    /**
     * @brief 执行ZSTD命令行工具
     * @param command 命令行字符串
     * @return 执行是否成功
     */
    bool _ExecuteZstdCommand(const char *command) const;

    /**
     * @brief 检查是否为TAR.ZSTD格式
     * @param filePath 文件路径
     * @return 是否为TAR.ZSTD格式
     */
    bool _IsTarZstdFile(const char *filePath) const;
};

#endif // ZSTD_FORMAT_H